package lv.clientedisqueria.model.instrumento;

import java.util.List;

import lv.clientedisqueria.client.ClienteServer;
import lv.clientedisqueria.model.DisqueriaTablaModelo;
import lv.clientedisqueria.model.Modelo;
import lv.mensajeriadisqueria.dto.InstrumentoDto;
import lv.mensajeriadisqueria.idomain.IInstrumento;
import lv.mensajeriadisqueria.mensaje.Mensaje;

/**
 *	Modelo de usuario
 */
public class InstrumentoModel extends Modelo<IInstrumento> {

	private final static String PROPERTY_CHANGE_CAMBIAR_INSTRUMENTO = "cambiarInstrumento";
	
	private final InstrumentoTablaModel instrumentoTablaModel;
	
	public InstrumentoModel() {
		instrumentoTablaModel = new InstrumentoTablaModel(this);
	}

	@Override
	public String getPropertyChangeCambio() {
		return PROPERTY_CHANGE_CAMBIAR_INSTRUMENTO;
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<IInstrumento> buscarTodos() {
		ClienteServer.getInstance().mandarMensaje(Mensaje.TODOS, new InstrumentoDto());
		return (List<IInstrumento>) ClienteServer.getInstance().getObjeto();
	}

	public void borrar() {
		ClienteServer.getInstance().mandarMensaje(Mensaje.BAJA, instrumentoTablaModel.getSeleccionado());
		instrumentoTablaModel.remover();
		notificar(Modelo.BORRAR);
	}

	public void insertar() {
		instrumentoTablaModel.adherirOModificar(new InstrumentoDto());
		notificar(Modelo.INSERTAR);
	}
	public void guardar(IInstrumento instrumento) {
		if (instrumento.getIdInstrumento() != null) {
			ClienteServer.getInstance().mandarMensaje(Mensaje.MODIFICAR, instrumento);
		} else {
			ClienteServer.getInstance().mandarMensaje(Mensaje.ALTA, instrumento);
		}
		IInstrumento instrumentoDto = (IInstrumento)ClienteServer.getInstance().getObjeto();
		instrumento.setIdInstrumento(instrumentoDto.getIdInstrumento());
		instrumentoTablaModel.adherirOModificar(instrumento);
		notificar(Modelo.GUARDADO);
	}

	@Override
	public DisqueriaTablaModelo<IInstrumento> getTablaModel() {
		return instrumentoTablaModel;
	}
}